package cn.stylefeng.guns.modular.schedule.service;

import cn.stylefeng.guns.modular.customer.domain.dto.ReturnGoodsWorksheetDTO;
import cn.stylefeng.guns.modular.order.domain.dto.OrderDTO;
import cn.stylefeng.guns.modular.purchase.domain.dto.PurchaseOrderDTO;
import cn.stylefeng.guns.modular.wms.domain.dto.PurchaseInputOrderDTO;
import cn.stylefeng.guns.modular.wms.domain.dto.ReturnGoodsInputOrderDTO;

/**
 * 调度中心的对外接口
 * @author allen
 * @version 1.0
 * @date 2021/4/11 23:31
 */
public interface ScheduleFacadeService {

    /**
     * 完成采购入库
     * @param purchaseInputOrderDTO 采购入库单DTO
     * @return 处理结果
     */
    Boolean finishPurchaseWarehouseEntry(PurchaseInputOrderDTO purchaseInputOrderDTO);


    /**
     * 提交订单
     * @param orderDTO 订单的DTO对象
     * @return 处理结果
     */
    Boolean submitOrder(OrderDTO orderDTO);

    /**
     * 支付订单
     * @param orderDTO 订单的DTO对象
     * @return 处理结果
     */
    Boolean payOrder(OrderDTO orderDTO);

    /**
     * 取消订单
     * @param orderDTO   订单的DTO对象
     * @return 处理结果
     */
    Boolean cancelOrder(OrderDTO orderDTO);

    /**
     * 完成退货入库
     * @param returnGoodsInputOrderDTO 退货入库单DTO
     * @return 处理结果
     */
    Boolean finishReturnGoodsWarehouseEntry(ReturnGoodsInputOrderDTO returnGoodsInputOrderDTO);

    /**
     * 采购中心的采购单通过审核之后，会来调用这个接口，调度采购入库
     * @param purchaseOrderDTO 采购单DTO对象
     * @return 处理结果
     */
    Boolean schedulePurchaseInput(PurchaseOrderDTO purchaseOrderDTO);

    /**
     * 订单中心的订单完成支付之后，订单中心会来调用这个接口，调度销售出库
     * @param orderDTO 订单的DTO对象
     * @return 处理结果
     */
    Boolean scheduleSaleDelivery(OrderDTO orderDTO);

    /**
     * 完成退货入库
     * @param orderDTO 订单DTO对象
     * @param returnGoodsWorksheetDTO 退货工单DTO
     * @return 处理结果
     */
    Boolean scheduleReturnGoodsInput(OrderDTO orderDTO, ReturnGoodsWorksheetDTO returnGoodsWorksheetDTO);
}
